The HDL language is a programming language which has been developed and optimized for the design and the modeling of electronic circuits since it enables accurately describing the behavior of electronic circuits. It is, for example, the VHDL language (for VHSIC Hardware Description Language, with VHSIC standing for Very High Speed Integrated Circuit), or the Verilog language.
Examples of electronic circuits formed based on HDL programs are Field Programmable Gate Array (FPGA) circuits or Application Specific Integrated circuits, or ASIC. More specifically, an FPGA circuit comprises electronic gates preimplanted on a circuit according to a given topology. In the initial state, these gates are not interconnected. To form an electronic circuit implementing specific functions based on an FPGA circuit, it is enough to create certain connections (which can be obtained by the turning-on of MOS transistors) between certain electronic gates of the FPGA to obtain the desired functions. For this purpose, a RAM, in which configuration data (bitstream) especially representing circuit connections are stored, may be used. The bitstream data are obtained from the HDL program describing the electronic circuit.
In the full design process of an electronic circuit, it is necessary to provide a debugging step which comprises the error detection, diagnosis, and correction, during the electronic circuit operation. For an electronic circuit designed based on an HDL program, an error correction may correspond to a modification of the HDL program describing the electronic circuit.
There currently exist two main types of methods for debugging an electronic circuit obtained from an HDL program.
The first method consists of using a logic analyzer. It may for example be the logic analyzer sold by Altera Company under trade name Signal TAP. A logic analyzer enables modifying the initial HDL program describing an electronic circuit to obtain a modified HDL program which describes the same electronic circuit with additional circuits which generally have no influence upon the behavior of the electronic circuit and which implement specific functions useful to debug the electronic circuit. An additional circuit may perform logic operations on given signals used by the electronic circuit and provide an alert signal when a logic condition is fulfilled, check the values of several signals in parallel, etc. The debugging of an FPGA circuit programmed from the initial HDL program is carried out by programming the FPGA circuit with the modified HDL program. The modified FPGA circuit is then operated in real time in its normal operation environment, and the logic analyzer is used to collect the different signals provided by the additional circuits added to the electronic circuit described by the initial HDL program.
The logic analyzer provides a user with a list of additional circuits from which it determines the specific functions for the electronic circuit debugging. However, the debugging functions that can be obtained are limited by the additional circuits provided by the logic analyzer. Even if more complex debugging functions are defined by combining the functions provided by the logic analyzer, not always can the user define specific debugging functions which would be particularly well adapted to the electronic circuit debugging.
The second method corresponds to a direct debugging of the HDL program. Such a debugging method may be implemented by means of the debugger sold by Synplicity Company under trade name Identify. Such a debugger enables inserting watchpoints at the level of certain parts of an initial HDL program describing an electronic circuit and providing a modified HDL program from which an FPGA circuit, for example, is programmed. On operation of the modified FPGA circuit thus programmed, the debugger exchanges signals with the FPGA circuit and can indicate to a user whether the parts of the initial HDL program marked with watchpoints have been executed during the operation of the FPGA circuit. The debugger can also indicate the value of signals used by the initial HDL program at the time when the marked parts of the initial HDL program are executed. If errors occur during the operation of the FPGA circuit, the user can locate the parts of the initial HDL program at the level of which the errors have occurred.
However, such a debugger, being purely code-oriented, does not enable building complex verification scenarios based on the values of the signals used by the FPGA circuit. The absence of a tool of logic analyzer type can make the detection of certain errors upon operation of the FPGA circuit or the determination of the origin of certain detected errors difficult.
Further, before programming of an FPGA circuit or manufacturing of an ASIC circuit, the debugging of the initial HDL program can be performed by means of a static analyzer. This is a fully automated tool, usable for any type of program, and enabling predicting the behavior on execution of a program by the sole examination of its text to detect errors in the program design. The analysis is directly performed on the HDL program and not on the way in which an FPGA circuit programmed from the HDL program operates. However, as soon as the complexity of the initial HDL program becomes significant, a static analyzer appears to be less reliable and may not detect certain errors in the initial program design. Further, such a tool does not enable taking into account certain problems inherent to the physical nature of the components of the circuit manufactured from the initial HDL program.
None of the previously-described debugging methods enables the user to freely define his own additional circuits to be incorporated to the electronic circuit associated with the initial HDL description program and which enable, on operation of the electronic circuit manufactured from the modified HDL description program, execution of specific debugging functions adapted to the debugging of the considered electronic circuit. Further, it is desirable for the user to be able, during the integrated circuit operation, to modify the value of an input signal, of an output signal, or of an internal signal used by the additional previously-defined circuits to perform a specific test.